# 方法 m
# 注解 p
# 属性 f


# 面向对象
# 面向对象是一种设计思想，在编码体现为类，代码以类的形式来组织，
# 每个类完成特定的功能（方法），
# 也会记录程序运行的状态，软件有若干类构成。

# 创建一个类
# class xxx
#     代码块

# 模块名最好和方法名不同避免发生读取错误

# 创建员工对象（实例）

# 前为模块   后为类
from Employee import Employee
# import Employee


# =============调用构造方法Employee==================
# 可以用构造方法Employee中的函数，不用说明和重复调用
emp1 = Employee('张三',25)
emp1.rest()

emp1.work()

# 访问赋值的变量
print(emp1.name)

# 可以修改模块里赋值的数
emp1.age = 22
print(emp1.age)

# 只能通过对象进行添加、删除属性，只对当前对象有效
emp1.score = 97
print(emp1.score)

emp1.yuwen = 60
# 删除后输出会报错
# del emp1.yuwen
# print(emp1.yuwen)





# =============对象的属性的操作方法==================
# 可以随意添加、删除属性
# hasattr 判断是否有指定属性
print(hasattr(emp1,'name'))

# getattr 返回对象的数值
print(getattr(emp1,'age'))

# setattr 修改属性的数值
setattr(emp1,'age',40)
print(emp1.age)

#  删除属性  没有属性会报错
delattr(emp1,'yuwen')



# ==========类的静态属性 ， 静态成员变量在函数内=============
# 对象点属性的方式无法修改 类的变量值
emp1.hcount += 1
emp2 = Employee('周五',23)
print(Employee.hcount)

# 类点属性的方式可以修改 类的变量值
Employee.hcount += 1
emp3 = Employee('小龙',24)
# 访问在模块里的静态成员变量
print(Employee.hcount)



#===========python的内置属性=============

print('输出类的文档注释内容',Employee.__doc__)

print('输出类名',Employee.__name__)

print('输出类所在的模块',Employee.__module__)

print('输出类的所有父类',Employee.__bases__)

print('输出类的所有信息',Employee.__dict__)

